import { createRouter, createWebHashHistory } from 'vue-router'
import { commonRoutes } from './routes'
import pinia from '@/store'
import { useUserStore } from '@/store/module/user'
import setting from '@/setting'

//@ts-ignore
import nprogress from 'nprogress'
//引入进度条样式
import 'nprogress/nprogress.css'

nprogress.configure({ showSpinner: false })

const userStore = useUserStore(pinia)

const router = createRouter({
  history: createWebHashHistory(),
  routes: commonRoutes,
  strict: true,
  // 因为会用之前页面滚动的位置
  scrollBehavior() {
    return { top: 0, left: 0 }
  }
})

router.beforeEach(async (to, from, next) => {
  // 设置标题
  document.title = `${setting.title}-${to.meta.title}`
  nprogress.start()

  const token = userStore.token
  const username = userStore.name
  // 如果存在token
  if (token) {
    // 如果去登录页面
    if (to.path == '/login') {
      next({ path: '/' })
    } else {
      // 如果存在用户名字
      if (username) {
        next()
      } else {
        // 没有就重新请求
        try {
          await userStore.get_user_info()
          //万一:刷新的时候是异步路由,有可能获取到用户信息、异步路由还没有加载完毕,出现空白的效果
          next({ ...to })
        } catch (err) {
          await userStore.post_logout()
          next({ path: '/login', query: { redirect: to.path } })
        }
      }
    }
  } else {
    // 没有token
    if (to.path == '/login') {
      next()
    } else {
      // 优化用户体验,用户从上个页面退出后再次登录可以再次访问该页面
      next({ path: '/login', query: { redirect: to.path } })
    }
  }
})

router.afterEach(() => {
  nprogress.done()
})

export default router
